home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 1.0 beta / flock-1.0RC3.en-US.win32.exe / flock / components / flockShelfService.js < prev    next >
Text File  |  2007-10-18  |  5KB  |  197 lines

  1. // BEGIN FLOCK GPL
  2. // 
  3. // Copyright Flock Inc. 2005-2007
  4. // http://flock.com
  5. // 
  6. // This file may be used under the terms of of the
  7. // GNU General Public License Version 2 or later (the "GPL"),
  8. // http://www.gnu.org/licenses/gpl.html
  9. // 
  10. // Software distributed under the License is distributed on an "AS IS" basis,
  11. // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12. // for the specific language governing rights and limitations under the
  13. // License.
  14. // 
  15. // END FLOCK GPL
  16.  
  17. const CC = Components.classes;
  18. const CI = Components.interfaces;
  19. const CU = Components.utils;
  20.  
  21. CU.import("resource:///modules/FlockXPCOMUtils.jsm");
  22.  
  23. const FLOCK_SHELF_CLASS_NAME = "Flock Shelf Service";
  24. const FLOCK_SHELF_CLASS_ID =
  25.   Components.ID("{ee266aa8-bc64-4e6a-9a20-1143b0444fbd}");
  26. const FLOCK_SHELF_CONTRACTID =
  27.   "@mozilla.org/rdf/datasource;1?name=flock-shelf";
  28.  
  29. const FLOCK_NS = "http://flock.com/rdf#";
  30. const FLOCK_SHELF_ROOT = "urn:flock:shelfroot";
  31.  
  32.  
  33. function flockShelfService() {
  34.   this._coop = CC["@flock.com/singleton;1"]
  35.                .getService(CI.flockISingleton)
  36.                .getSingleton("chrome://flock/content/common/load-faves-coop.js")
  37.                .wrappedJSObject;
  38.  
  39.   this.shelfRoot = this._coop.get(FLOCK_SHELF_ROOT);
  40.   if (!this.shelfRoot) {
  41.     this.shelfRoot = new this._coop.Folder(FLOCK_SHELF_ROOT);
  42.     this._coop.favorites_root.children.add(this.shelfRoot);
  43.   }
  44. }
  45.  
  46. flockShelfService.prototype = new FlockXPCOMUtils.genericComponent(
  47.   FLOCK_SHELF_CLASS_NAME,
  48.   FLOCK_SHELF_CLASS_ID,
  49.   FLOCK_SHELF_CONTRACTID,
  50.   flockShelfService,
  51.   CI.nsIClassInfo.SINGLETON,
  52.   [CI.flockIShelfService]
  53. );
  54.  
  55. // Shelf Interface Implementation
  56. flockShelfService.prototype.elementsCount =
  57. function SHELF_elementsCount() {
  58.   return this._getChildCount(this.shelfRoot);
  59. }
  60.  
  61. flockShelfService.prototype.insert =
  62. function SHELF_insert(aTitle, aContent, aUrl, aType, aPos, aParent) {
  63.   var date = new Date();
  64.   var id = FLOCK_SHELF_ROOT
  65.            + ":obj_" + date.getTime()
  66.            + ":" + Math.round(100 * Math.random());
  67.  
  68.   var item = new this._coop.WebSnippet(id,
  69.     {
  70.       content: aContent, 
  71.       name: aTitle, 
  72.       creationDate: date, 
  73.       URL: aUrl, 
  74.       snippetType: aType
  75.     });
  76.  
  77.   var parentNode = aParent ? this._coop.get(aParent) : this.shelfRoot;
  78.   if (aPos < 0) {
  79.     parentNode.children.add(item);
  80.   } else {
  81.     parentNode.children.insertAt(item, aPos);
  82.   }
  83.  
  84.   this._refreshCount(parentNode);
  85.   return id;
  86. }
  87.  
  88.  
  89. flockShelfService.prototype.createFolder =
  90. function SHELF_createFolder(aName) {
  91.   var id = FLOCK_SHELF_ROOT + ":folder:" + aName;
  92.  
  93.   var folder = new this._coop.Folder(id, { name: aName });
  94.   this.shelfRoot.children.add(folder);
  95.  
  96.   return id;
  97. }
  98.  
  99. flockShelfService.prototype.moveTo =
  100. function SHELF_moveTo(aId, aFolder) {
  101.   var folderId = FLOCK_SHELF_ROOT + ":folder:" + aFolder;
  102.  
  103.   var item = this._coop.get(aId);
  104.   if (!item) {
  105.     debug("*** ERROR: Can't find "+aId+"\n");
  106.     return;
  107.   }
  108.  
  109.   var folder = this._coop.get(folderId); 
  110.   if (!folder) {
  111.     this.createFolder(aFolder);
  112.     folder = this._coop.get(folderId); 
  113.   }
  114.  
  115.   if (folder.children.indexOf(item) > 0) {
  116.     // Already in the folder
  117.     return;
  118.   }
  119.  
  120.   var parent = item.getParent();
  121.   parent.children.remove(item);
  122.   folder.children.add(item);
  123.  
  124.   this._refreshCount(parent);
  125.   this._refreshCount(folder);
  126. }
  127.  
  128. flockShelfService.prototype.changeAttribute =
  129. function SHELF_changeAttribute(aUrn, aAttribute, aValue){
  130.   var snippet = this._coop.get(aUrn);
  131.   snippet[aAttribute] = aValue;
  132. }
  133.  
  134. flockShelfService.prototype.getPositionOf =
  135. function SHELF_getPositionOf(aUrn) {
  136.   var snippet = this._coop.get(aUrn);
  137.  
  138.   var parent = snippet.getParent();
  139.   return parent.children.indexOf(snippet);
  140. }
  141.  
  142. flockShelfService.prototype.getTargetOf =
  143. function SHELF_getTargetOf(aUrn, aTarget) {
  144.   var snippet = this._coop.get(aUrn);
  145.   return (snippet ? snippet[aTarget] : null);
  146. }
  147.  
  148. flockShelfService.prototype.remove =
  149. function SHELF_remove(aUrn) {
  150.   var snippet = this._coop.get(aUrn);
  151.  
  152.   var parent = snippet.getParent();
  153.   parent.children.remove(snippet);
  154.   this._refreshCount(parent);
  155.  
  156.   snippet.destroy();
  157. }
  158.  
  159. flockShelfService.prototype.clear =
  160. function SHELF_clear() {
  161.   var children = this.shelfRoot.children.enumerate();
  162.   var elts = [];
  163.   while (children.hasMoreElements()) {
  164.     elts.push(children.getNext());
  165.   }
  166.   while (elts.length > 0) {
  167.     var elt = elts.pop();
  168.     this.shelfRoot.children.remove(elt);
  169.     elt.destroy();
  170.   }
  171. }
  172.  
  173. flockShelfService.prototype._getChildCount =
  174. function SHELF__getChildCount(obj) {
  175.   var count = 0;
  176.  
  177.   var children = obj.children.enumerate();
  178.   while (children.hasMoreElements()) {
  179.     children.getNext();
  180.     count++;
  181.   }
  182.  
  183.   return count;
  184. }
  185.  
  186. flockShelfService.prototype._refreshCount =
  187. function SHELF__refreshCount(aFolder) {
  188.   if (!aFolder.children) {
  189.     return;
  190.   }
  191.  
  192.   aFolder.count = this._getChildCount(aFolder);
  193. }
  194.  
  195. var NSGetModule = FlockXPCOMUtils.generateNSGetModule(FLOCK_SHELF_CLASS_NAME,
  196.                                                       [flockShelfService]);
  197.